package cn.hznc.utils;

import cn.hznc.exception.ToolLifeCycleException;
import cn.hznc.repository.InventoryLocationRespository;
import lombok.extern.slf4j.Slf4j;

import javax.annotation.Resource;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Objects;

/**
 * 通用校验工具
 *
 * @Author Administrator
 * @Date 2023/3/15 16:05
 */
@Slf4j
public class CheckUtil<T> {

    /**
     * 检查数据库更新字段唯一
     *
     * @param id
     * @param list
     * @param <T>
     * @return
     */
    public static <T> Boolean isUniqe(Integer id, List<T> list) {
        if (Objects.isNull(id)){
            return true;
        }
        if (null == list|| list.isEmpty()) {
            // 数据库中不存在 唯一
            return true;
        } else if (list.size() > 1) {
            // 数据库中存在多个 不唯一
            return false;
        } else {
            // 数据库中只有一个
            T data= list.get(0);
            if (data!= null) {
                // id相等的情况下（即同一条记录）的时候 唯一
                Integer result=null;
                try {
                    Method method = data.getClass().getMethod("getId");
                    result = (Integer)method.invoke(data);
                } catch (Exception exception) {
                    log.error("getId,check error!!!",exception);
                }
                //获取属性值
                if (result != null && id == result.intValue()) {
                    // 唯一
                    return true;
                }
                // 不唯一
                return false;
            } else {
                // 数据库中不存在 肯定唯一
                return true;
            }
        }
    }

}
